昨天在一個地方剛好看到三者的對比,今天就來比較一下三個 DB 刪除資料的方式
在管理資料庫時,針對表(table)進行刪除資料的操作是算是很常遇到的需求。針對不同情境,SQL 提供了三個常見的指令也就是:TRUNCATE、DELETE 和 DROP。這三者的功能看似相近,但在使用上卻有很大的不同
TRUNCATE TABLE
是一個用來快速清空 table 資料的指令。它不會逐行刪除資料,會直接釋放表中的所有空間,並保留 table 的欄位結構。因為直接清空,一般來說,速度比 delete 還快。
像是我們之前有提到 Postgresql 的 VACUUM 機制,如果使用 TRUNCATE 就不用再執行 VACUUM,他會直接釋放出空間。
TRUNCATE TABLE table_name;
DELETE
是用來逐行刪除 table 中的資料的,它的靈活性較高,可以根據 WHERE 條件選擇性地刪除特定的行,並保留 table 的欄位結構。delete 如果是使用 Postgrsql 的話,不會立刻釋放出空間。
DELETE FROM table_name WHERE condition;
DROP TABLE
用來刪除整個 table 及其相關的所有內容。這個命令將刪除 table 結構、資料、索引以及所有關聯資料。執行 DROP 後,table 將完全從資料庫中移除。
DROP TABLE table_name;
功能 | TRUNCATE TABLE | DELETE | DROP TABLE |
---|---|---|---|
資料刪除方式 | 清空 table | 逐行刪除 | 完全刪除 table |
刪除條件 | 無法加條件 | 可以加 WHERE 條件 |
無條件,直接刪除 |
速度 | 高效 | 取決於資料量和條件 | 高效 |
Increment ID 重置 | 可能重置 | 不重置 | 無效 |
table 結構改變 | 否 | 否 | 是 |
trigger 觸發 | 否 | 是 | 否 |